﻿

#include<stdio.h>



//#define M 100
//
//int main()
//{
//	int a = M;
//#undef M;// #undef - 删除宏定义
//#define M 200;
//	int b = M + 2;
//	return 0;
//}

////宏定义 
////用宏定义 函数
//// \续行符
////##  可以把位于它两边的符号合成⼀个符号，它允许宏定义从分离的⽂本⽚段创建标识符。
//// type 如果是 int 那么 type##_max 最终形成 int_max
//#define GENERIC_MAX(type) \
//type type##_max(type x, type y)\
//{ \
// return (x>y?x:y); \
//}
//
//GENERIC_MAX(int)
//GENERIC_MAX(float)
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int ret = int_max(a,b);
//	printf("%d ", ret);
//	float f = float_max(3.5f, 4.1f);
//	printf("%lf ", f);
//	return 0;
//}

//#define PRINT(n) printf("the value of "#n " is %d", n);
////#运算符将宏的⼀个参数转换为字符串字⾯量 把传入的字符串 转化成 宏的参数
//
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	PRINT(a);
//	PRINT(b);
//	return 0;
//}


//#define ADD(X) ((X)*(X))//定义宏  名字(参数) 内容
//#define SUM(x) x+x
//#define MAX(a, b) ((a)>(b)?(a):(b)) // 有副作用的宏 
////宏相较于 函数 
////宏 速度快 每次一使用宏都会插入 一份代码
////函数 慢 不管使用多少次 都只有这一份函数  
//
//
//int main()
//{
//	int a = 10;
//	printf("%d ", ADD(a+2));
//	// a+2*a+2 ==17	
//	printf("%d ", 10 * SUM(a));
//	// 10*a+a == 110
//	int x, y,z;
//	x = 5;
//	y = 8;
//	z = MAX(x++, y++);
//	// (a++)>(b++)?(a++):(b++)
//	printf("x=%d y=%d z=%d\n", x, y, z);// x= 6 y = 9 z =8
//	return 0;
//}

//int main()
//{
//	printf("%s\n", __FILE__);//	目标文件的路径
//	printf("%d\n", __LINE__);////⽂件当前的⾏号
//	//__DATE__ //⽂件被编译的⽇期
//	//__TIME__ //⽂件被编译的时间
//	//__STDC__ //如果编译器遵循ANSI C，其值为1，否则未定义 VS不支持 ANSI C
//	return 0;
//}
